#include "ms618_algbackdatum.h"

using namespace MeasurE618;
AlgBackDatum::AlgBackDatum(int i):AlgBase(i)
{
}

void AlgBackDatum::operator()(cv::Mat &srcImg, int id)
{
//    qDebug() << " ";
    // back图  SE9  \paras616\back\SE.xml的最后一行 setup1   注意vector<cv::Point2f>& datum要转换到全局图像坐标系下
    std::vector<cv::Rect> rangVec;
    TemplateMatch(srcImg,m_dataAllVec[26],rangVec);

    std::vector<int> paras;
    for(int j=0;j< m_dataAllVec[26].m_edgeParam.cols;j++)
    {
        paras.push_back(m_dataAllVec[26].m_edgeParam.at<int>(5,j));
    }
    std::vector<Point2f> datum;
    edgedetect obj;
    obj.GetDatum616(srcImg(rangVec[0]).clone(),paras,datum);
    for(auto ptr=datum.begin();ptr!=datum.end();ptr++)
    {
        ptr->x+=static_cast<float>(rangVec[0].x);
        ptr->y+=static_cast<float>(rangVec[0].y);
    }
    AlgBase::datumBackVec[id]=datum;


#ifdef MEASUR_E618_DRAW_IMG
    static int circleId = 0;
    float k1=(datum[1].y-datum[0].y)/(datum[1].x-datum[0].x);
    for(int i=0;i<srcImg.cols;++i){
        cv::circle(srcImg,cv::Point(i,(int)(k1*(i-datum[0].x)+datum[0].y)),1,160,-1);
    }
    float k2=(datum[2].x-datum[0].x)/(datum[2].y-datum[0].y);
    for(int i=0;i<srcImg.rows;++i){
        cv::circle(srcImg,cv::Point((int)(k2*(i-datum[0].y)+datum[0].x),i),1,160,-1);
    }
//    for(int i = 0; i < datum.size(); i++) {
//        cv::circle(srcImg, datum[i], 1, 160, -1);
//    }

    std::string imgName = ("datumback_1" + to_string(circleId));
    imgName += ".jpg";
    circleId++;
    cv::imwrite(imgName, srcImg);
    qDebug() << "datum_x: " << datum[0].x << "datum_y:" << datum[0].y;
    qDebug() << "datum_x: " << datum[1].x << "datum_y:" << datum[1].y;
    qDebug() << "datum_x: " << datum[2].x << "datum_y:" << datum[2].y;
#endif

    AlgBase::flagVec[id] = true;
    (*AlgBase::cvarptrVec[id]).notify_all();
}
